package com.sidom.movieIndexer.facade;

import java.util.List;
import java.util.Set;

import com.sidom.movieIndexer.domain.Movie;

/**
 * The high-level Movie Indexer business interface.
 *
 * <p>Overview<br>
 * <li>Movie files will be fetched from a path</li>.
 * <li>For every movie IMDB information will be retrieved/li>.
 * <li>A html page will be generated giving an overview</li>.
 *
 * @author Siebe
 */
public interface MovieIndexerFacade {
	/**
	 * Index movies of a path.
	 * Will use extensions and removeWordFilter defined in movieIndexer.properties.
	 * @param path The location on the disk of the movies
	 * @return A {@link List} of {@link Movie}s with imdb information filled in.
	 */
	List<Movie> indexMovies(String path);
	
	/**
	 * Index movies of a path.
	 * @param path The location on the disk of the movies
	 * @param extenstions A {@link Set} of extensions. e.g. content of set: avi,mp4 will only get avi and mp4 files on the provided location
	 * @return A {@link List} of {@link Movie}s with imdb information filled in.
	 */
	List<Movie> indexMovies(String path, Set<String> extenstions);
	
	/**
	 * Index movies of a path.
	 * @param path The location on the disk of the movies.
	 * @param extensions A {@link Set} of extensions. e.g. content of set: avi,mp4 will only get avi and mp4 files on the provided location.
	 * @param wordsToRemove A {@link Set} of wordsToRemove. e.g. content of set: cd1,cd2 will remove all the words from the {@link Movie#getName()}.
	 * @return A {@link List} of {@link Movie}s with imdb information filled in.
	 */
	List<Movie> indexMovies(String path, Set<String> extensions, Set<String> wordsToRemove);
}
